package com.gitee.helioz.openai.api.dto.edits;

import com.google.gson.annotations.SerializedName;
import lombok.Data;

/**
 * 〈文本编辑请求〉
 *
 * @author <a href="https://gitee.com/helioz">Morning Starr</a>
 */
@Data
public class EditRequest {

    /**
     * 要使用的模型ID，目前支持两种: text-davinci-edit-001，code-davinci-edit-001
     * <pre>
     * text-davinci-edit-001模型适用于对文本进行编辑操作，包括添加、删除、替换等操作，适用于对一般文本进行编辑。
     * code-davinci-edit-001模型适用于对代码进行编辑操作，包括对代码的添加、删除、替换等操作，适用于对编程代码进行编辑。
     * 必填
     * </pre>
     */
    private String model;

    /**
     * 默认值： ”“，用于指定编辑操作的输入文本，作为编辑的起始点。
     * <pre>选填</pre>
     */
    private String input;
    /**
     * 用于指定编辑操作的指令，告诉模型如何编辑输入的文本。
     * 编辑指令是一个字符串，用于描述希望模型对输入文本进行的编辑操作。
     * 编辑指令可以包含一系列编辑操作，例如添加、删除、替换等。
     * 编辑指令需要符合OpenAI API的语法和规范，以确保模型可以正确理解并执行所需的编辑操作。
     * <pre>必填</pre>
     */
    private String instruction;

    /**
     * 默认值：1，用于指定在输入文本和编辑指令上要生成的编辑次数。
     * 生成的编辑次数是一个整数值，表示希望模型对输入文本和编辑指令进行的编辑操作的数量。
     * 较大的值将生成更多的编辑操作，从而可能导致更丰富和复杂的输出结果。较小的值则生成较少的编辑操作，从而可能导致输出结果较为简单和粗糙。
     * 通常，较小的值适用于简单和快速的编辑需求，而较大的值适用于需要更复杂和详细编辑操作的场景。
     * <pre>选填</pre>
     */
    private Integer n = 1;


    /**
     * 默认值：1，用于指定生成文本时的采样温度。
     * 采样温度是一个浮点数值，取值范围在0和2之间。较高的采样温度（如0.8）将使生成的文本更加随机化，而较低的采样温度（如0.2）将使生成的文本更加集中和确定性。
     * <pre>选填</pre>
     */
    private double temperature = 0;

    /**
     * 默认值：1，用于指定Nucleus Sampling的方式来生成文本。
     * Nucleus Sampling是一种与温度采样类似的方式，但其不是通过固定的温度值来控制生成的随机性，而是通过设置一个概率质量的阈值来控制生成的多样性。
     * 具体而言，参数top_p表示模型在生成文本时，只考虑到概率质量排名在前top_p的部分，这些部分的概率质量总和不超过top_p。
     * 例如，当top_p设为0.1时，模型只会考虑到概率质量排名在前10%的词汇，而忽略掉其余90%的词汇。
     * 与温度采样类似，Nucleus Sampling也可以用于控制生成文本的多样性和随机性。
     * 较小的top_p值会导致生成的文本更加集中和一致，而较大的top_p值会使生成的文本更加多样化和随机化。
     * 更改时与temperature二选一不要同时更改两者
     * <pre>选填</pre>
     */
    @SerializedName("top_p")
    private Double topP = 1d;
}
